特征选择
特征选择
特征重要性 是一个用于选择在预测目标变量时贡献最大的特征的过程。使用选定的特征而不是所有特征可以降低过拟合风险、提高准确性并减少训练时间。在 PyCaret 中,这可以通过 feature_selection 参数实现。
参数
- *feature\selection: bool, default = False
当设置为 True 时,会基于
feature_selection_estimator确定的特征重要性分数选择一个特征子集。 - *feature_selection_method: str, default = 'classic'
特征选择的算法。可选项:
- *'univariate': 使用 sklearn 的 SelectKBest。
- *'classic': 使用 sklearn 的 SelectFromModel。
- *'sequential': 使用 sklearn 的 SequentialFeatureSelector。
- *feature_selection_estimator: str or sklearn estimator, default = 'lightgbm'
用于确定特征重要性的分类器。估计器在拟合后应具有 feature_importances_ 或 coef_ 属性。若为 None,则使用 LGBClassifier。当 feature_selection_method=univariate 时,此参数会被忽略。
- *n_features_to\select: int or float, default = 0.2
使用 feature\selection 要选择的最大特征数。如果 <1,则表示起始特征的比例。注意,在计数时,该参数不会考虑 ignore_features 或 keep_features 中的特征。
示例
# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')
# init setup
from pycaret.regression import
clf1 = setup(data = diabetes, target = 'Class variable', feature_selection = True)
Before

特征重要性之前的 DataFrame
After

特征重要性之后的 DataFrame
删除多重共线性
多重共线性(也称为*共线性)是指数据集中某个特征变量与同一数据集中的另一个特征变量高度线性相关的现象。多重共线性会增加系数的方差,从而使线性模型的系数不稳定且噪声较大。处理多重共线性的一种方式是删除两个高度相关特征中的一个。在 PyCaret 中可以使用 remove_multicollinearity 参数实现这一点。
参数
remove_multicollinearity: bool, default = False
当设置为 True 时,互相关高于定义阈值的特征将被移除。对于每个组,它会移除所有特征,保留与 y 相关性最高的特征。
multicollinearity_threshold: float, default = 0.9
用于识别相关特征的最小绝对 Pearson 相关系数。默认值会移除相同的列。当 remove_multicollinearity 不为 True 时,该参数被忽略。
示例
# load dataset
from pycaret.datasets import get_data
concrete = get_data('concrete')
# init setup
from pycaret.regression import
reg1 = setup(data = concrete, target = 'strength', remove_multicollinearity = True, multicollinearity_threshold = 0.3)
Before

删除多重共线性之前的 DataFrame 视图
After

删除多重共线性之后的 DataFrame 视图
主成分分析
主成分分析(PCA)是一种无监督技术,用于机器学习中降低数据的维度。它通过识别能够捕获完整特征矩阵大部分信息的子空间来压缩特征空间,并将原始特征空间投影到较低维度。
参数
pca: bool, default = False
当设置为 True 时,将应用降维,使用由 pca_method 参数定义的方法将数据投影到较低维空间。
pca_method: string, default = 'linear'
应用 PCA 的方法。可能的值有:
'linear': 使用奇异值分解(SVD)。
'kernel': 通过使用 RBF 核进行降维。
'incremental': 类似于 'linear',但对大型数据集更高效。
pca_components: int/float, default = 0.99
要保留的成分数。如果 pca_components 是浮点数,则被视为信息保留的目标百分比;如果为整数,则被视为要保留的特征数量。pca_components 必须严格小于数据集中原始特征的数量。
pca_components: int, float, str or None, default = None
要保留的成分数。当 pca=False 时,此参数被忽略。
如果为 None:保留所有成分。
如果为 int:保留的绝对成分数量。
如果为 float:使得需要解释的方差大于 n_components 指定的百分比。取值应在 0 到 1 之间(仅适用于 pca_method='linear')。
如果为 'mle':使用 Minka 的最大似然估计(MLE)来估计维度(仅适用于 pca_method='linear')。
示例
# load dataset
from pycaret.datasets import get_data
income = get_data('income')
# init setup
from pycaret.classification import
clf1 = setup(data = income, target = 'income >50K', pca = True, pca_components = 10)
之前

PCA 之前的数据框视图
之后

PCA 之后的数据框视图
忽略低方差
有时数据集可能包含一个 类别特征,该特征具有多个水平(levels),且这些水平的分布可能偏斜,其中某一水平可能占主导地位。这意味着该特征提供的信息变化较小。对于机器学习模型而言,此类特征可能不会带来太多信息,因此可以在建模时忽略。在 PyCaret 中可以使用 low_variance_threshold 参数实现这一点。
参数
low_variance_threshold: float 或 None,默认 = None
移除训练集方差低于所提供阈值的特征。如果为 0,则保留所有非零方差的特征,即移除在所有样本中取值相同的特征。如果为 None,则跳过此转换步骤。
示例
# load dataset
from pycaret.datasets import get_data
mice = get_data('mice')
# filter dataset
mice = mice[mice['Genotype'] == 'Control']
# init setup
from pycaret.classification import
clf1 = setup(data = mice, target = 'class', low_variance_threshold = 0.1)
Before

在忽略低方差之前的 DataFrame 视图
After

在忽略低方差之后的 DataFrame 视图
最后更新 2 年前